/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名: com.oceansoft.mobile.econsole.modules.base.biz.AbsBizCache.java 
 * <p>
 * 类产生时间: 2014-4-30 上午 10:33
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 掌上公安应用平台
 * <p>
 * 所在部门: 开发部--手持技术部
 * <p>
 * <p>
 */
package com.oceansoft.mobile.econsole.modules.base.biz;

import com.oceansoft.mobile.econsole.cache.memcache.CacheUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 业务对象缓存抽象类
 *
 * @author: chenw
 * @time: 2014-4-30 上午 10:33
 */
public abstract class AbsBizCache implements IBizObjSerializable {

    private static final long serialVersionUID = 8489377152416733605L;
    Log log = LogFactory.getLog(getClass());

    public AbsBizCache() {
        log.debug("BusinessObject Initial.");
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    /**
     * 判断当前是否为新业务对象，没有被持久化
     */
    public boolean isNew() {
        return this.getId() == null;
    }

    @Override
    public String getCacheKey() {
        log.debug("get cache key ==>" + this.getId());
        return CacheUtils.keyOfObject(this.getClass(), this.getId());
    }

    /*
     * 重载equals，用来判断业务对象是否相同
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof IBizObjSerializable)) {
            return false;
        }
        IBizObjSerializable bo = (IBizObjSerializable) obj;
        return !(this.isNew() || bo.isNew()) && this.getId().equals(bo.getId());
    }
    //    protected AppConfiguration getAppConfig() {
    //        return AppConfiguration.getInstance();
    //    }
}
